
import re
import sys

def remove_comments_and_clean(file_path):
    try:
        # 读取文件内容
        with open(file_path, "r", encoding="utf-8") as file:
            content = file.read()

        # 移除块注释 /* ... */
        # 使用DOTALL标志使.匹配包括换行符在内的所有字符
        content = re.sub(r'/\*.*?\*/', '', content, flags=re.DOTALL)

        # 移除单行注释 // ...
        content = re.sub(r'//.*', '', content)

        # 清理空白行：连续多个空行替换为一个空行
        # 先将Windows换行符统一为Unix格式
        content = content.replace('\r\n', '\n')
        # 替换连续空行为单个空行
        content = re.sub(r'\n+', '\n', content).strip() + '\n'

        # 生成新文件路径
        if file_path.endswith('.h'):
            new_file_path = file_path.replace('.h', '_no_comments.h')
        else:
            # 如果不是.h文件，在文件名后添加后缀
            new_file_path = f"{file_path}_no_comments"

        # 写入处理后的内容
        with open(new_file_path, 'w', encoding="utf-8") as new_file:
            new_file.write(content)
        
        print(f"处理完成，文件已保存至: {new_file_path}")
        return True

    except FileNotFoundError:
        print(f"错误: 找不到文件 '{file_path}'")
    except PermissionError:
        print(f"错误: 没有权限访问文件 '{file_path}'")
    except Exception as e:
        print(f"处理文件时发生错误: {str(e)}")
    return False

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("用法: python remove_comments.py <输入文件路径>")
        sys.exit(1)
    
    file_path = sys.argv[1]
    remove_comments_and_clean(file_path)

